iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
AI & Data

30天成為資料分析師-手把手R語言與資料分析教學系列 第 24

[Day24] R語言-邏輯斯迴歸(分類模型)

  • 分享至 

  • xImage
  •  

另一種常見的模型為分類模型,在分類模型中,資料的label(Y)為離散型,其中又可以分為: 二分類多分類,在介紹分類模型之前,要先來講講當訓練模型完後,會需要進行模型的驗證,看模型準確率是否夠高,或是需要再做修正

  • 訓練集/測試集切割
    當模型訓練完,會需要做準確率的驗證,為了避免資料不夠擬合(under-fitting)或過度擬合(over-fitting),所以會在一開始先將資料切割成訓練集測試集,常見的比例為訓練集:測試集=8:2或是7:3,如此一來,可以避免使用同一組資料訓練,又使用同一組資料做測試的有失公平情況出現
    註:另一種切割資料方法是將資料切割成3部分,包含:訓練集/測試集/驗證集

第一種要介紹的分類模型為邏輯斯迴歸(logistic regression) ,是一種二分類的分類模型,在R語言中可以使用glm()這個函數。
下方舉R內建的資料iris()當作範例,資料中有花萼長度、寬度、花瓣長度、寬度,以及花的品種,我們利用長度寬度來將花的品種做分類(Y),當輸入花的長度、寬度,就可以預測他可能是哪一個品種。
邏輯斯迴歸是二分類方法,在iris()資料中有三種品種,因此我們只取出versicolor、virginica這兩個品種來當訓練資料

# 載入需要用到的套件
library(dplyr) # 資料處理
library(caTools) # 用來切割訓練/測試集

# 載入資料,並取出versicolor、virginica這兩個品種
data(iris)
day24 = iris %>% filter(Species %in% c("versicolor", "virginica"))

# 將Species欄位(label Y)轉為0, 1
day24$Species = ifelse(day24$Species == "versicolor", 1, 0)

# 切割訓練/測試集
split <- sample.split(day24, SplitRatio = 0.8)
train_data <- subset(day24, split == "TRUE")
test_data <- subset(day24, split == "FALSE")

# train model
model_glm = glm(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Length, 
                data = train_data , family = "binomial")

# 查看模型結果
summary(model_glm)

# predict model
result = predict(model_glm, test_data, type = "response")

由於邏輯斯迴歸的預測結果為該筆資料label=0以及1分別的機率,因此我們需要設定一個閥值,假設閥值為0.5,代表將資料判給機率大於0.5的那類。
預測完結果可以與真實結果做比對,來了解模型準確率狀況

result = ifelse(result > 0.5, 1, 0)

# 比較模型預測結果與實際狀況
table(predicted = result, actual = test_data$Species)

後續會再介紹判斷模型好壞的一些指標,那我們今天就到這吧


上一篇
[Day23] R語言-迴歸預測模型(連續型)
下一篇
[Day25] R語言-決策樹(分類模型)
系列文
30天成為資料分析師-手把手R語言與資料分析教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言